package com.cskaoyan.javase.array._3momory;

/**
 * 画JVM内存模型图，描述数组动态初始化的过程
 * 为了能够更好描述这个过程，我们需要对数组进行一些基本操作
 *
 * @since 11:23
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // 动态初始化一个int数组
        /*
            a和arr本质上都是属于局部变量
            局部变量必须完成初始化才能够使用
         */
        int a = 10;
        int[] arr = new int[3];

        // 直接输出数组名
        /*
            首先arr是数组名，同时它更是一个局部变量
            我们可以输出数组名，看一下这个局部变量中到底存放了什么
            输出的结果是：[I@6d6f6e28
            解释：
            [ 一个左中括号表示这是一个一维数组。（[[就表示二维数组）
            I 表示这个一维数组是int类型的
            @后面跟的是一个十六进制的数，这个十六进制的数表示的是地址
            所以arr中存储的是地址
         */
        System.out.println(arr);

        // 如果不想看地址，想看具体的数组元素，需要使用下列语法
        /*
            对于int类型数组而言，动态初始化
            其中元素的默认值是0
         */
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        System.out.println(arr.length);
        arr[0] = 10;
        arr[1] = 20;
        arr[2] = 30;
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        System.out.println(arr);
    }
}
